package 其他.斗地主之顺子;

/**
 * 牌的数量为13张, 是固定的~
 */

import java.util.ArrayList;
import java.util.Scanner;

public class Main_数组 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String[] strings = s.split(" ");
        int[] ints = new int[12]; // 一共有12张牌, 不算2
        // 做映射, 把字符数组一一映射到数组里面去
        for (int i = 0; i < strings.length; i++) {
            int value = mapping(strings[i]);
            if (value==-1)continue;// 直接跳过,不往里面添加进数组
            ints[value-3]=ints[value-3]+1;
        }
        ArrayList<Integer> path = new ArrayList<>();
        ArrayList<ArrayList<Integer>> resultList = new ArrayList<>();

        for (int i = 0; i < ints.length; i++) {
            // 如果当前位置元素个数为0, 进行一次收集
            if (ints[i]==0){
                if (path.size()>=5){
                    ArrayList<Integer> temp = new ArrayList<>();
                    for (Integer item : path) {
                        temp.add(item);
                    }
                    resultList.add(temp);
                    // 清空集合
                    path.clear();

                    // i 从集合的第一个元素的下标再开始
                    i=temp.get(0)-3-1;
                }else {
                    // 如果集合中的元素个数是<5的, 那么肯定不会存在这种重复的连子的问题, 直接清空集合
                    path.clear();
                    // 剪枝操作, 如果当前为0, 那么后面的连子的最大长度为4是不满足要求的, 可以直接退出了
                    if (i>8){
                        break;
                    }

                }
            }else {
                path.add(i+3);
                ints[i]--;
                if (i==11&&path.size()>=5){
                    ArrayList<Integer> temp = new ArrayList<>();
                    for (Integer item : path) {
                        temp.add(item);
                    }
                    resultList.add(temp);
                    i=temp.get(0)-3-1;
                    path.clear();//     清空path集合~
                }
                if (i==11&&path.size()<5){
                    break;
                }
            }
        }

        if (resultList.size()==0){
            System.out.println("NO");
        }else {
            for (int i = 0; i < resultList.size(); i++) {
                for (Integer item : resultList.get(i)) {
                    System.out.print(reversMapping(item)+" ");
                }
                System.out.println();
            }
        }


    }

    public static int mapping(String a){
        switch (a){
            case "J":
                return 11;
            case "Q":
                return 12;
            case "K":
                return 13;
            case "A":
                return 14;
            case "2":
                return -1;
            default:
                return Integer.valueOf(a);
        }
    }

    public static String reversMapping(int a){
        switch (a){
            case 11:
                return "J";
            case 12:
                return "Q";
            case 13:
                return "K";
            case 14:
                return "A";
            default:
                return String.valueOf(a);
        }
    }
}
